分享好友 技术首页 技术分类 切换频道

在Windows下用Delphi开发微机与PLC的串行通信程序

2020-07-17 21:39160

  在自动测量和控制系统中,常常需要在上位机(微机)和PLC(可编程控制器) 之间进行数据交 换和发送控制信号,串行通信是其主要手段,我们在开发一套自动测试系统时就是采用串行 通信的方法,即由上位机向PLC发送命令,控制其进行各种测试线路的切换。

1 通信协议
  在本系统中微机和PLC采用一对一通信连接,上位机作主局,PLC作子局。通信开始时由上位 机向PLC发出呼叫,PLC收到上位机的呼叫后应答,并返回应答信号,然后上位机发首标,PL C应答,接着上位机发数据块,PLC应答,数据全部发完后上位机发一结束标志,至此上位机 与PLC的通信结束。
  上述通信协议可用图1描述

按此在新窗口浏览图片


该协议使用的传输控制字符有:
  ENQ(查询):在需要通信时作为发送方的请求。
  ACK(认可):接收方给发送方的应答,表示正确接收信息包。
  SOH(首标):表示要传送的是首标。
  ETB(数据结束):标志数据块的结束。
  STX(文本开始):标志数据块的开始。
  ETX(文本结束):标志文本块的结束。
  EOT(结束):表示传送结束。
  LRC:纵向冗余校验码,即对前面所有的传输码进行异或计算。

2 Windows95下用Delphi实现串行通信
  在Windows95环境下用Delphi3.0实现串行通信有3种方法:①使用VB的通信构件MSComm ;② 调用Windows95下的API函数来完成通信;③熟悉C/C++或其它语言的用户可以将自己的程序 编译链接为DLL(动态链接库),这样Delphi就可以调用DLL里的函数来通信。下面就这3种方 法分别加以讨论。
2.1 使用VB通信构件
  在使用VB构件之前,首先要将VB构件文件MSComm32.OCX安装到Delphi的动态构件库中。打开 主菜单Component选择Import ActiveX Control...项,在弹出的对话框里选中Microsoft Co mm Control5.0(安装VB5.0后必有此项),再单击Install按钮。此时Delphi载入VB构件文件并重新编译DCL(Delphi Component Library)。编译完成后,MSComm的小按钮出现在ActiveX 页中,这时程序就可以使用此 构件了。应该注意的是,安装前要确保VB通信构件的控制文件MSComm32.OCX(在VB4.0以上版 本中)在编译DCL之前已在\Windows\System下。接着向窗体中 添加1个MSComm构件并进行串行口的初始化,初始化子例程序如下:

Procedure TForm1.FormCreate(Sender:TObject);
begin
mPort:=2; {使用COM2口为通信口}
MSComm1.InBufferSize:=1024; {设定接收队列长度为
1KB}
MSComm1.OutBufferSize:=1024; {设定发送队列长度为
1KB}
MSComm1.Settings:=‘9600,N,8,1';{波特率9600b/s,无校验,8个数据位,1 个停止位}
MSComm1.InputLen:=0; {读取整个接收缓冲区内容}
MSComm1.InputBufferCount:=0; {清除接收缓冲区}
MSComm1.PortOpen=:True; {打开串行口}
End;
  用Input属性从接收对列读入字符串:ReadBuffer:=MSComm1.Input;用Output属性发送字 符串:MSComm1.Output:=WriteBuffer;然后根据上述通信协议,即可快速编制出通信软件 。
2.2 调用Windows95下的API函数
  Windows95对通信功能的支持非常强,它增加了一系列用于通信的API函数供用户调用。同样 ,要进行串行通信,也需要先对串口进行初始化。Windows95把串行口作为设备文件,对串 口操作就是对文件操作。因此,必须先为串口分配1个文件句柄,以后对串口操作都将通过 这个文件句柄来完成。初始化过程如下:
  (1)调用CreateFile函数为串口分配1个文件句柄。
  Var HComm:THandle;
  HComm:=CreateFile(‘COM2',GENERICREAD or GENERICWRITE ,0,@NULL,OPENEXISTING,FILEFLAGOVERLAPPED,0);
  如果对串行口1操作,用字符串COM1代替COM2即可。
  (2)调用SetupComm函数设置串行口的输入和输出缓存区。
  SetupComm(HComm,1024,1024);
  (3)填充1个DCB(设备控制块)结构来设置通信参数。通过调用GetCommState函数 获得当前系统的DCB结构,按需要赋值给DCB的成员,如波特率、奇偶校验、数据位、停止位 等,zui后将创建后的DCB结构作为参数传给SetCommState函数就可以初始化串口了。

  Var DCB:TDCB;
  GetCommState(HComm,DCB);
  BuildCommDCB(‘9600,N,8,1',DCB);
  SetCommState(HComm,DCB);
  (4)用PurgeComm函数来清除接收缓存区的内容。
  PurgeComm(HComm,PurgeRXCLEAR);

  (5)串行口的初始化完成后,接下来的工作就是根据通信协议发送和接收串行口上的数据。R eadFile函数用于接收数据,WriteFile函数用于发送数据。

  Var
  OverLapped:TOverLapped;
  DataIn:Byte;
  DataOut:Byte;
  BufferSize:Integer;
  COMSTAT cs;
  ReadFile(HComm,DataIn,cs.cbInQue,BufferSize,@OverLapped);
   {从串行口读输入缓存的字节,存入DataIn变量中}
  WriteFile(HComm,DataOut,cs.cbOutQue,BufferSize,@OverLapped);
   {向串行口写输出缓存的字节,要写的数据存放在DataOut}
  按照上述步骤,再根据前面的通信协议,即可完成串行通信。
2.3 调用其它语言编写的DLL
  由于这里所说的其它语言包含面很广,可以是开发人员所熟悉的编程语言(只要其支持DLL即 可),如C和C++等,所以如何编写DLL就不再详述了。将编写好的DLL进行编译,然后把编译 通过后的DLL放在\Windows\System子目录下,在Delphi下打开1个单元文件,将DLL里的所 有函数在单元文件中声明,格式如下:

  unit UnitName;
  interface
  procedure p1(param1:type1;param2:type2;...);stdcall;
  external‘DLLName';
  …
  implementation
  end

  其中UnitName为单元文件名,p1为调用过程名,param1、param2为参数名,type1、type2为 参数类型名,DLLName为DLL名。串行通信时,只要将此单元包含进编程单元就行了。

3 结 论
  对使用Delphi开发Windows95下与PLC进行串行通信程序的3种方法进行比较可以得出这样的 结论:
  (1)使用VB通信构件不但能够实现API的所有功能,而且程序简单明了。
  (2)调用Windows95的API通信函数,可以设计和开发出各种通信软件,但编程复杂。
  (3)第3种方法适合那些熟悉其它编程语言的开发人员。
  以上所有程序均在Windows95中文版下使用Delphi3.0调试通过。

免责声明:矿库网文章内容来源于网络,为了传递信息,我们转载部分内容,尊重原作者的版权。所有转载文章仅用于学习和交流之目的,并非商业用途。如有侵权,请及时联系我们删除。感谢您的理解与支持。

点赞 0
举报
收藏 0
评论 0
分享 0
智能矿山 | 煤矿5G融合通信管理平台研究
引 言随着煤矿开采规模的扩大以及安全生产要求的提高,井下的环境监测、视频监控、远程控制、避险救灾等各类系统在不断增加,对井下通信系统提出了更高的要求。目前,煤矿井下普遍部署了4G、WiFi、人车定位、数字广播等多个通信系统,各个系统独立工作,数据闭环管理,缺乏系统之间的功能联动。5G是新一代移动通信技术,具

0评论2023-03-173271

屏蔽矿用通信电缆-MHYVRP MHYVP
屏蔽矿用通信电缆-MHYVRPMHYVP- 屏蔽矿用通信电缆型号:MHYVRP,MHYVP;MHYAV MHYV1×22×21×45×2×7/0.28矿用通信电缆用于平巷斜巷及机电硐室 MHJYV4/0.28铜线+3/0.28钢线1×22×2矿用通信电缆用于机械损伤较高平巷和斜巷 MHYAV1/0.820×

0评论2020-07-2036

HYA通信电缆 200*2*0.4对通信电缆
通信电缆型号HYA2000*2*0.4的详细介绍 通信电缆型号HYA2000*2*0.4|HYA2000*2*0.5|HYA2000*2*0.6|HYA2000*2*0.7|HYA2000*2*0.8|HYA2000*2*0.9 HYA、HYAC、HYAT、HPVV、HYV、HJVV、HYY 铠装通信电缆HYA22HYV22HYAT22HYY23HYYT23HYA23HYAT23

0评论2020-07-2060

自主研发具有HART Moden功能的HART手操器投放市场
HART全功能手持通讯器是一种便携式的终端(通用USB接口可与PC连机操作),它与采用HART通信协议的仪表一起使用,对其进行设定,更改和显示,它可监控输入/输出值和自诊断结果。设定恒定电流的输出和调零。而且具有HART Moden功能,通过它

0评论2020-07-2069

研华ARK嵌入式工控机在自动售货机的应用
产品分类 嵌入式工控机  产品特征 研华,凌动,紧凑,低功耗,无风扇,丰富I/O,无线通信  应用/行业推荐 自助售货、零售、电子看板、监控、工厂控制  案例介绍   在一些大城市,如日本东京,任何商业性房产租赁费用都很高,促使自动售

0评论2020-07-20385

智能液晶触摸显示终端与单片机接口的设计
题记:作为一种常见的显示设备,LCD具有功耗低,体积小,重量轻,显示信息量大等特点,尤其是在便携设备中,更占据着主流的地位。对于字符或数字的简单信息显示,通常可用段码式LCD驱动器。对于复杂的信息显示,则必须由点阵式LCD驱动器

0评论2020-07-20659

HYA-5×2×0.9价格
我厂的天联牌市话电缆 WDZ-HYA-5×2×0.9是我厂的主要产品之一,我厂专业生产市话电缆 WDZ-HYA-5×2×0.9,天津市电缆总厂*分厂年产量达几十万公里,市话电缆 WDZ-HYA-5×2×0.9销量居国内首位。我厂是专业性电缆生产厂家,中国矿业公司

0评论2020-07-2040

S7200PLC编程电缆 编程适配器
USB-PPI USB接口的西门子PLCS7-200编程电缆,带指示灯,对应西门子产品:6ES7901-3DB30-0XA0,通信距离达2公里,电缆长度为3米USB-PPI+ 隔离型USB接口的S7-200PLC编程电缆,带指示灯,对应西门子产品:6ES7901-3DB30-0XA0,通信距离达2公

0评论2020-07-20281

PLC编程电缆
黄冈鑫唯电子有限公司是一家专业从事自动化和工控周边产品及兼容西门子通讯产品的销售、技术应用的高新技术企业。公司本着“诚实守信,客户*,质量为辅”我们将以优良的品质为客户提供完善的服务!主营产品:可编程控制器:三菱PLC,永宏

0评论2020-07-20387

通信电缆技术参数HYAT HYFA HYV
●HYAT铜芯聚乙烯绝缘挡潮综合护套填充型市内电缆 ●HYFA铜芯泡沫聚乙烯绝缘挡潮综合护套市内电缆 ●HYFAT铜芯泡沫聚乙烯绝缘挡潮综合护套填充型市内电缆 ●H YV22, HYV32, HYA23, HVA33, /通信电缆技术参数●HYAT铜芯聚乙烯绝缘挡潮综合

0评论2020-07-20662